话说切糕有很多细菌,并且高价,现在不让买了,也不让卖了……..
好吧我们来解决一下这题吧。
额……感觉题意有点不可读,实际上题目就是说给你一个立方体,然后立方体中的每一个点都有一个权值,表示如果要切这个点的话所花费的代价,那么这时需要让你横着切,将这个立方体切成两半,求最小代价。
这就是很明显的最小割了,切成两半使得 $s$ 和 $t$不连通嘛。
于是我们可以考虑这样建边:对于这个立方体,我们建一个虚拟层—第 $0$ 层,对于第 $0$ 层的每一个点,我们用 $s$ 与其相连,这个连接的边是不能被割掉的,所以边权为 $inf$ 。然后对于第 $R$ 层的所有点,我们都将其与 $t$ 相连,同样的道理,边权为 $inf$ 。然后中间的点的话,考虑一个点 $(x,y,z)$ ,我们连一条 $(x−1,y,z)$ 到 $(x,y,z)$ 的边,权值为 $v(x,y,z)$ (即点 $(x,y,z)$ 的权值) 。
这个就是基本的了,如果没有第二个光滑性的限制,直接跑 $Dinic$ 就好了。
但是现在有了这个限制,怎么办呢?
对于一个竖轴,假设这个竖轴的横竖坐标为 $(x,y)$ ,现在在这个竖轴上有一个高度为 $z$ 的点,这个点的坐标显然为 $(x,y,z)$ ,那么现在的情况就是,如果选了 $z$ ,那么相邻竖轴上的 $z−d,z+d$ 都必须选。
于是我们考虑,从 $(x,y,z)$ 向相邻数轴的 $z−d,z+d$ 连一条 $inf$ 的边,这样就可以保证正确性了。
Code:
1 |
|
本文标题:【题解】 [HNOI2013]切糕 网络流 bzoj3144
文章作者:Qiuly
发布时间:2019年03月04日 - 00:00
最后更新:2019年03月29日 - 13:52
原始链接:http://qiulyblog.github.io/2019/03/04/[题解]bzoj3144/
许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。